package com.ylz.sjzx.sio.common.core.core.Interceptor;

/**
 * Created with IntelliJ IDEA.
 * <p> Description:
 * 拦截器接口,标记为IInterceptor的实现类将会被所管理。
 * <p>
 * 注意:
 * 架构包内预设的interceptor按照进行了归类,
 * 不同类型的interceptor在中的加载方式有所不同<br>
 * <p>
 */
public interface IInterceptor {

    /**
     * 前置处理
     *
     * @return boolean 当返回false时,
     * 后续的拦截器preHandle方法,postHandle方法和事件都不再执行,但是所有拦截器的afterCompletion方法都会执行
     */
    boolean preHandle();

    /**
     * 后置处理
     *
     * @return boolean 当返回false时,后续的拦截器不再执行和事件都不再执行,但是所有拦截器的afterCompletion方法都会执行
     */
    boolean postHandle();

    /**
     * finally处理,理论上该方法内部不应该抛出异常,异常情况需要自己进行捕获处理。
     * 应达到的效果是即使抛出异常,也不会阻断后续代码流程进行。
     * 适合的场景有资源释放,异常处理,日志记录等操作。
     */
    void afterCompletion();
}
